from django.contrib.auth.models import AbstractUser
from django.db import models

# Create your models here.
from django.db import models

from MSB_ERP.utils.base_model import BaseModel


class MenuModel(BaseModel):
    #功能菜单的模型类
    number=models.IntegerField('排序数字',blank=True,null=True)
    url=models.CharField('url地址',max_length=256,blank=True,null=True)
    name=models.CharField('菜单的名字',max_length=50)
    #不会真正把数据库的数据删除，默认是0，如果是1，则表示删除
    delete_flag=models.CharField('删除的标记',max_length=1,default='0')
    parent=models.ForeignKey('self',blank=True,null=True,related_name='children',on_delete=models.CASCADE)

    class Meta:
        db_table='t_menu'
        verbose_name='功能菜单表'
        verbose_name_plural=verbose_name
        ordering=['number']

    def __str__(self):
        return self.name


#ERP系统的模型类，默认使用django自带的User
class UserModel(AbstractUser,BaseModel):
    phone=models.CharField('手机号码',max_length=11,unique=True,blank=True,null=True)
    real_name=models.CharField('真实姓名',max_length=64,blank=True,null=True)
    #用户所有的角色
    roles=models.ManyToManyField('RolesModel',db_table='t_users_roles',blank=True)
    dept=models.ForeignKey('DeptModel',blank=True,null=True,on_delete=models.SET_NULL,verbose_name='用户所在的部门')
    class Meta:
        db_table='t_user'
        verbose_name='用户系统用户表'
        verbose_name_plural=verbose_name
        ordering = ['id']

    def __str__(self):
        return self.username+":"+self.real_name


class PermissionsModel(BaseModel):
    #权限的模型类，包含两个要素：资源（父菜单，接口），操作
    method_choices=(
        ('POST','增'),#‘增’是描述，不写也没有关系
        ('DELETE','删'),
        ('PUT','改'),
        ('PATCH','改局部'),
        ('GET','查'),
    )
    """
    只要是chioces参数的字段，如果你想要获得对应的key和value，默认是获取的是key，
    如果需要获取value，可以采用get_字段名_display()
    print(permission.method) 获取key
    print(permission.get_method_display()) 获取value
    
    """
    name=models.CharField('权限名称',max_length=50)
    is_menu=models.BooleanField('是否为菜单',default=True)#True是菜单，False是接口
    #操作
    method=models.CharField('操作',max_length=8,blank=True,null=True,choices=method_choices)#choices指定只能用的方法是
    path=models.CharField('访问URL地址',max_length=256,blank=True,null=True)
    desc=models.CharField('权限的描述',max_length=512,blank=True,null=True)
    menu=models.ForeignKey('MenuModel',null=True,blank=True,related_name='permissions_list',on_delete=models.CASCADE)

    def __str__(self):
        return self.name

    class Meta:
        db_table='t_permissions'
        verbose_name = '权限'
        verbose_name_plural = verbose_name
        ordering=['id']

class RolesModel(BaseModel):
    #角色模型
    name=models.CharField('角色名称',unique=True,max_length=50)
    permissions=models.ManyToManyField('PermissionsModel',db_table='t_roles_permissions',
                                       blank=True,verbose_name='角色的权限')
    def __str__(self):
        return  self.name
    class Meta:
        db_table = 't_roles'
        verbose_name = '角色'
        verbose_name_plural = verbose_name

class DeptModel(BaseModel):
    """
    组织架构 部门
    """
    name = models.CharField(max_length=32, unique=True, verbose_name='部门')
    parent = models.ForeignKey('self', null=True, blank=True, related_name='children', on_delete=models.CASCADE, verbose_name='父部门')
    address = models.CharField(max_length=128, blank=True, default='', verbose_name='部门地址')


    def __str__(self):
        return self.name

    class Meta:
        db_table = 't_dept'
        verbose_name = '部门'
        verbose_name_plural = verbose_name


























